package com.htht.job.executor.service.parameter;

import com.alibaba.fastjson.JSON;
import com.htht.job.core.api.parameter.JobParameterService;
import com.htht.job.core.api.parameter.ParameterService;
import com.htht.job.executor.dao.parameter.JobParameterDao;
import com.htht.job.executor.model.parameter.CommonParameter;
import com.htht.job.executor.model.parameter.JobParameterModel;
import com.htht.job.executor.model.parameter.ParameterModel;
import org.apache.commons.lang3.StringUtils;
import org.jeesys.common.jpa.dao.string.BaseDao;
import org.jeesys.common.jpa.service.string.BaseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.*;

@Transactional
@Service("jobParameterService")
public class JobParameterServiceImpl extends BaseService<JobParameterModel>
        implements JobParameterService {
    @Autowired
    private JobParameterDao jobParameterDao;
    @Autowired
    private ParameterService parameterService;

    @Override
    public BaseDao<JobParameterModel> getBaseDao() {
        // TODO Auto-generated method stub
        return jobParameterDao;
    }

    public JobParameterModel findJobParameterById(String id) {
        JobParameterModel jobParameterModel = this.getById(id);
        return jobParameterModel;
    }

    public ParameterModel findParameterById(String id) {
        ParameterModel parameterModel = parameterService.findParameterById(id);
        return parameterModel;
    }

    public Map getJobParameter(String jobId,
                                                 String parameterId, String mark) {
        List<CommonParameter> jobparameterlist = new ArrayList<CommonParameter>();
        JobParameterModel jobParameterModel = this.findJobParameterById(jobId);
        if (null != jobParameterModel) {
            if (!"[]".equals(jobParameterModel.getFixedParameter())
                    && !StringUtils.isEmpty(jobParameterModel
                    .getDynamicParameter()) && mark.equals("1")) {
                jobparameterlist = JSON.parseArray(jobParameterModel.getFixedParameter(), CommonParameter.class);
            }
            if (!"[]".equals(jobParameterModel.getDynamicParameter())
                    && !StringUtils.isEmpty(jobParameterModel
                    .getDynamicParameter()) && mark.equals("2")) {
                jobparameterlist = JSON.parseArray(jobParameterModel.getDynamicParameter(), CommonParameter.class);
            }
        }
        List<CommonParameter> parameterlist = new ArrayList<CommonParameter>();
        ParameterModel parameterModel = this.findParameterById(parameterId);
        if (null != parameterModel) {
            if (!"[]".equals(parameterModel.getFixedParameter())
                    && !StringUtils.isEmpty(parameterModel.getFixedParameter())
                    && mark.equals("1")) {
                parameterlist = JSON.parseArray(
                        parameterModel.getFixedParameter(),
                        CommonParameter.class);
            }
            if (!"[]".equals(parameterModel.getDynamicParameter())
                    && !StringUtils.isEmpty(parameterModel.getFixedParameter())
                    && mark.equals("2")) {
                parameterlist = JSON.parseArray(
                        parameterModel.getDynamicParameter(),
                        CommonParameter.class);
            }
        }
        List<CommonParameter> list = new ArrayList<CommonParameter>();
        for (int i = 0; i < parameterlist.size(); i++) {
            String identify = parameterlist.get(i).getIdentify();
            boolean flag = true;
            for (int j = 0; j < jobparameterlist.size(); j++) {
                if (jobparameterlist.get(j).getIdentify().equals(identify) && !identify.equals("type") && !identify.equals("url")) {
                    parameterlist.get(i).setValue(jobparameterlist.get(j).getValue());
                }
            }

        }
        list.addAll(parameterlist);

        Map map=new LinkedHashMap();
        for (int i = 0; i < list.size(); i++) {
            map.put(list.get(i).getIdentify(),list.get(i).getValue());
        }

        return map;
    }

    public JobParameterModel saveJobParameter(
            JobParameterModel jobParameterModel) {
        return this.save(jobParameterModel);
    }

    public String getJobParameterMap(String jobId,
                                     String parameterId, String mark) {
        List<CommonParameter> jobparameterlist = new ArrayList<CommonParameter>();
        JobParameterModel jobParameterModel = this.findJobParameterById(jobId);
        Map map = new HashMap();

        if (null != jobParameterModel) {
            if (!"[]".equals(jobParameterModel.getFixedParameter())
                    && !StringUtils.isEmpty(jobParameterModel
                    .getDynamicParameter()) && mark.equals("1")) {
                jobparameterlist = JSON.parseArray(
                        jobParameterModel.getFixedParameter(),
                        CommonParameter.class);
            }
            if (!"[]".equals(jobParameterModel.getDynamicParameter())
                    && !StringUtils.isEmpty(jobParameterModel
                    .getDynamicParameter()) && mark.equals("2")) {
                jobparameterlist = JSON.parseArray(
                        jobParameterModel.getDynamicParameter(),
                        CommonParameter.class);
            }
        }
        List<CommonParameter> parameterlist = new ArrayList<CommonParameter>();
        ParameterModel parameterModel = this.findParameterById(parameterId);
        //mark为1标示输入参数为模版传入type
        if(mark.equals("1")) {
            map.put("type", parameterModel.getType());
            map.put("url", parameterModel.getUrl());

        }else{
            map.put("type", "0");
        }

        if (null != parameterModel) {
            if (!"[]".equals(parameterModel.getFixedParameter())
                    && !StringUtils.isEmpty(parameterModel.getFixedParameter())
                    && mark.equals("1")) {
                parameterlist = JSON.parseArray(
                        parameterModel.getFixedParameter(),
                        CommonParameter.class);
            }
            if (!"[]".equals(parameterModel.getDynamicParameter())
                    && !StringUtils.isEmpty(parameterModel.getFixedParameter())
                    && mark.equals("2")) {
                parameterlist = JSON.parseArray(
                        parameterModel.getDynamicParameter(),
                        CommonParameter.class);
            }
        }
        List<CommonParameter> list = new ArrayList<CommonParameter>();
        for (int i = 0; i < parameterlist.size(); i++) {
            String identify = parameterlist.get(i).getIdentify();
            boolean flag = true;
            for (int j = 0; j < jobparameterlist.size(); j++) {
                if (jobparameterlist.get(j).getIdentify().equals(identify) && !identify.equals("type") && !identify.equals("url")) {
                    parameterlist.get(i).setValue(jobparameterlist.get(j).getValue());
                }
            }

        }
        list.addAll(parameterlist);
        map.put("list", list);

        return JSON.toJSONString(map);
    }
}
